package com.interfaces.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.JdbcTemplate;

import com.util.PaginatedList;

public interface BaseService {
	/**
	 * 通过SQL查询
	 * @param sql
	 * @return MAP数组
	 * @author:zhuyoulong
	 * @update:[日期YYYY-MM-DD][更改人姓名][变更描述]
	 */
	public List<Map<String,String>> queryString(String sql);
	
	public List<Map<String,String>> executeQuery(String sql);
	/**
	 * SQL分页查询
	 * @param sql
	 * @param countSql
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * @author:zhuyoulong
	 * @update:[日期YYYY-MM-DD][更改人姓名][变更描述]
	 */
	public PaginatedList<Map<String,String>> executeQueryPage(String sql,String countSql,int pageNo, int pageSize);
	
	/**
	 * 通过JDBC的SQL执行更新与删除
	 * @param sql
	 * @author:zhuyoulong
	 * @update:[日期YYYY-MM-DD][更改人姓名][变更描述]
	 */
	public void executeUpdate(String sql);
	
	/**
	 * 返回一条记录信息,在写程序时确保只有一条记录
	 * @param sql
	 * @return
	 * @author:zhuyoulong
	 * @update:[日期YYYY-MM-DD][更改人姓名][变更描述]
	 */
	public Map<String,String> executeMap(String sql);
	/**
	 * 通过JDBC的SQL执行更新与删除
	 * @param sql
	 * @param noUpdateCount
	 * @author:zhuyoulong
	 * @update:[日期YYYY-MM-DD][更改人姓名][变更描述]
	 */
	public void runQuery(String sql,boolean noUpdateCount);
	/**
	 * 通过SQL查询得到分页数组
	 * @param sql
	 * @param countSql
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * @author:zhuyoulong
	 * @update:[日期YYYY-MM-DD][更改人姓名][变更描述]
	 */
	public PaginatedList<Map<String,String>> queryStringPage(String sql,String countSql,int pageNo, int pageSize);
	
	public abstract List getAll();
	
	public abstract List getAll(Object obj);
	
    public abstract Object get(Serializable serializable);

    public abstract boolean exists(Serializable serializable);

    public abstract Object save(Object obj);

    public abstract void remove(Serializable serializable);
    
    public void setClass(Class persistentClass);
    
    public JdbcTemplate getJdbcTemplate();
}
